/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package src.model;

import src.dto.UsuarioDTO;

import java.util.Collection;
import java.util.ArrayList;
import java.sql.*;

/**
 *
 * @author camila
 */
public class usuarioDAO {

    //Declaração de variáveis
    private static Conexao conexao = null;
    private static Statement stmt = null;

    UsuarioDTO usuario = new UsuarioDTO();
    Collection<UsuarioDTO> retorno = new ArrayList<UsuarioDTO>();

    private String sql;

    //Método construtor do UsuárioDAO.
    public usuarioDAO(){
        conexao= Conexao.getConexao();
    }

    //Método busca os dados do usuário para armazenar na classe UsuarioLogado.
    public UsuarioDTO dadosUsuario(UsuarioDTO dados){
        // Sql de consulta a banco de dados
        sql = "SELECT id_usuario, nome, login, senha FROM Usuario WHERE login = '" + dados.getLogin() + "' AND senha = '" + dados.getSenha() + "'";

        //Executa SQL
        try{
            this.stmt = this.conexao.con.createStatement();
            ResultSet rs = this.stmt.executeQuery(sql);
            while (rs.next()){
                usuario.setId_usuario(rs.getInt("id_usuario"));
                usuario.setNome(rs.getString("nome"));
                usuario.setLogin(rs.getString("login"));
                usuario.setSenha(rs.getString("senha"));
            }
        }catch(SQLException se){
            printSQLException(se);
        }
        return usuario;
    }

    //Método para verificar se login existe.
    public Collection<UsuarioDTO> verfLoginExiste(UsuarioDTO dados){
        sql = "SELECT id_usuario, nome, login, senha FROM Usuario WHERE login = '" + dados.getLogin() + "'";
        try{
            this.stmt = this.conexao.con.createStatement();
            ResultSet rs = this.stmt.executeQuery(sql);
            while (rs.next()){
                usuario = new UsuarioDTO();
                usuario.setId_usuario(rs.getInt("id_usuario"));
                usuario.setNome(rs.getString("nome"));
                usuario.setLogin(rs.getString("login"));
                usuario.setSenha(rs.getString("senha"));
                retorno.add(usuario);
            }
        }catch(SQLException se){
            printSQLException(se);
        }
        return retorno;
    }

    //Método para efetuar cadastro do usuário
    public boolean cadastrarUsuario(UsuarioDTO dados){
        // Sql de para inserir dados do usuário
        sql = "INSERT INTO Usuario (nome, login, senha) values ('"+ dados.getNome() +"', '"+ dados.getLogin() +"', '"+ dados.getSenha() +"')";
        //Executa SQL
        return modificar(sql);
    }

    public boolean AlterarUsuario (UsuarioDTO dados){
        // Sql de para modificar dados do usuário
        sql = "UPDATE Usuario SET nome = '" + dados.getNome() + "', login = '" + dados.getLogin() + "' , senha = '" + dados.getSenha() + "' WHERE id_usuario = " + dados.getId_usuario() + "";
        //Executa SQL
        return modificar(sql);
    }

    //Método para inserir, excluir e atualizar.
    private boolean modificar(String sql){
        try{
            PreparedStatement stmt = this.conexao.con.prepareStatement(sql);
            stmt.executeUpdate();
            return true;
        }catch(SQLException se){
            printSQLException(se);
            return false;
        }
    }

    //Método que imprimi a exceção do SQL
    private static void printSQLException(SQLException se){
        while(se != null){
            System.out.print("SQLException: State: " + se.getSQLState());
            System.out.print("Severety: " + se.getErrorCode());
            System.out.print(se.getMessage());
            se = se.getNextException();
        }
    }
}
